home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / byteibm.arc / FRIED.ARC / PI87.BAS < prev    next >
Encoding:
BASIC Source File  |  1985-07-12  |  5.9 KB  |  114 lines

  1. 10 REM PI87.BAS -- Performance Index Benchmark Program
  2. 20 REM Copyright (C) MicroWay, Inc., 1986
  3. 30 REM MicroWay, Inc.    PO Box 79    Kingston MA 02364    (617) 746-7341
  4. 40 REM
  5. 50 REM Uses Numeric Coprocessor (8087 or 80287).  See PI.BAS for a similar
  6. 60 REM program which doesn't use the Numeric Coprocessor.
  7. 70 REM Compiled with MicroWay 87BASIC Compiler V5.05 (/O switch) and linked
  8. 80 REM with special library based on MicroWay 87BASIC/INLINE.
  9. 90 REM
  10. 100 DEFINT A-Y
  11. 110 DIM NAME$ (11), SECTION$ (11), ZF (11), ZP (11)
  12. 120 DIM DSRC (10249), DDEST (10249)
  13. 130 COMMON DSRC (), DDEST (), SPC1!, SPC2!, SPC3!, SVA!, SVB!
  14. 140 DEF FNS# (X$) = 60# * (60# * VAL (MID$ (X$, 1, 2)) + VAL (MID$ (X$, 4, 2))) + VAL (MID$ (X$, 7, 2)) + .01# * VAL (MID$ (X$, 10, 2))
  15. 150 LINES$ = "" : FOR I = 1 TO 69 : LINES$ = LINES$ + CHR$ (205) : NEXT I
  16. 160 PRINT CHR$ (201); LINES$; CHR$ (187)
  17. 170 PRINT CHR$ (186); " M i c r o W a y   P e r f o r m a n c e   I n d e x   P r o g r a m "; CHR$ (186)
  18. 180 PRINT CHR$ (200); LINES$; CHR$ (188)
  19. 190 PRINT "                   Copyright (C) MicroWay, Inc., 1986."
  20. 200 PRINT "               (This version uses the Numeric Coprocessor.)"
  21. 210 PRINT
  22. 220 DATA 0.6,0.6,0.6,0.6,0.595,0.589,0.62,0.6,0.6,0.6064,0.6064
  23. 230 DATA " 1"," 2"," 3"," 4"," 5"," 6"," 7"," 8"," 9","10","11"
  24. 240 DATA "Floating point -- arithmetic                 "
  25. 250 DATA "Floating point -- Savage (transcendentals)   "
  26. 260 DATA "Data bus bound -- 4K bytes of instructions   "
  27. 270 DATA "Data bus bound -- 4K bytes of register moves "
  28. 280 DATA "Data bus bound -- 16K bytes of instructions  "
  29. 290 DATA "Clock bound -- 4K byte block moves           "
  30. 300 DATA "Clock bound -- 16K byte block moves          "
  31. 310 DATA "Integer multiply and divide                  "
  32. 320 DATA "Subroutine calls and stack operations        "
  33. 330 DATA "Disk I/O -- sequential read from random file "
  34. 340 DATA "Disk I/O -- sequential write to random file  "
  35. 350 DATA 25,25,11.111111,11.111111,11.111111,8.333333,8.333333,0,0,0,0
  36. 360 CALL TIME100
  37. 370 FIRSTTIME = 1
  38. 380 FOR I = 1 TO 11 : READ ZF (I)       : NEXT I
  39. 390 FOR I = 1 TO 11 : READ SECTION$ (I) : NEXT I
  40. 400 FOR I = 1 TO 11 : READ NAME$ (I)    : NEXT I
  41. 410 FOR I = 1 TO 11 : READ ZP (I)       : NEXT I
  42. 420 MAXWRITES = 20 : MAXREADS = 20
  43. 430 GOTO 560
  44. 440 REM *** Create file so that reads will have something to work on
  45. 450 REM *** and so that writes will not have to create new records.
  46. 460 IF MAXWRITES > MAXREADS THEN MPUT = MAXWRITES : ELSE MPUT = MAXREADS
  47. 470 OPEN "TEMP.TMP" FOR RANDOM AS #1 LEN=2048
  48. 480 FIELD #1, 2048 AS S$
  49. 490 T$ = "" : FOR I=0 TO 1023 : T$ = T$ + MKI$ (256 * RND (I)) : NEXT I
  50. 500 LSET S$ = T$
  51. 510 FOR I = 1 TO MPUT : PUT #1, I : NEXT I : CLOSE #1
  52. 520 PRINT "Please enter percentage of benchmark devoted to each operation."
  53. 530 FOR I = 1 TO 11
  54. 540 PRINT "Section ";SECTION$ (I);"   ";NAME$ (I);": "; : INPUT "", ZP (I)
  55. 550 NEXT I
  56. 560 ZT = 0 : FOR I = 1 TO 11 : ZT = ZT + ZP (I) : NEXT I
  57. 570 IF ZT > 99.5 AND ZT < 100.5 THEN GOTO 630
  58. 580 PRINT : PRINT "Caution: percentages total "; ZT;
  59. 590 INPUT " Adjust to 100% ? ", ADJ$ : PRINT : ADJ$ = LEFT$ (ADJ$, 1)
  60. 600 IF ADJ$ = "Y" OR ADJ$ = "y" THEN GOTO 620
  61. 610 IF ADJ$ = "N" OR ADJ$ = "n" THEN GOTO 650 : ELSE GOTO 590
  62. 620 IF ZT = 0! THEN GOTO 830
  63. 630 Z100 = 1# / ZT : FOR I = 1 TO 11 : ZP (I) = ZP (I) * Z100 : NEXT I
  64. 640 ZT = 100# : GOTO 660
  65. 650 FOR I = 1 TO 11 : ZP (I) = .01 * ZP (I) : NEXT I
  66. 660 PRINT "Section                  Description                  Performance Index"
  67. 670 PRINT "======= ============================================= ================="
  68. 680 ZTET = 0# : FOR J = 1 TO 11
  69. 690 ZITER = 60# * ZP (J) / ZF (J)
  70. 700 ITER = INT (ZITER) : IF ZITER - ITER > .1 THEN ITER = ITER + 1
  71. 710 REM         1   2   3   4   5   6   7   8   9   10  11
  72. 720 ON J GOSUB 910,920,930,940,950,960,970,980,990,1000,1070
  73. 730 ZET = FNS# (B$) - FNS# (A$)
  74. 740 IF ITER <> 0 THEN ZET = ZET * ZITER / ITER : ELSE ZET = 0#
  75. 750 PRINT "  ";SECTION$ (J);"    ";NAME$ (J);"      ";
  76. 760 IF ZET = 0 THEN PRINT "  ----" : GOTO 780
  77. 770 PRINT USING "###.##"; ZF (J) * ZITER / ZET
  78. 780 ZTET = ZTET + ZET
  79. 790 NEXT J
  80. 800 PRINT : PRINT "Performance index for entire benchmark is ";
  81. 810 IF ZTET = 0 THEN PRINT "not meaningful." : GOTO 830
  82. 820 PRINT USING "###.##"; .6# * ZT / ZTET
  83. 830 PRINT
  84. 840 INPUT "Would you like to run again, specifying the section weights yourself? ", MORE$ : MORE$ = LEFT$ (MORE$, 1)
  85. 850 IF MORE$ = "Y" OR MORE$ = "y" THEN GOTO 890
  86. 860 IF MORE$ = "N" OR MORE$ = "n" THEN GOTO 870 : ELSE GOTO 830
  87. 870 IF FIRSTTIME > 1 THEN KILL "TEMP.TMP"
  88. 880 END
  89. 890 PRINT : FIRSTTIME = FIRSTTIME + 1
  90. 900 IF FIRSTTIME = 2 THEN GOTO 440 : ELSE GOTO 520
  91. 910 A$ = TIME$ : FOR I = 1 TO ITER : CALL FPCSE : NEXT I : B$ = TIME$ : RETURN
  92. 920 A$ = TIME$ : FOR I = 1 TO ITER : CALL FPSAV : NEXT I : B$ = TIME$ : RETURN
  93. 930 A$ = TIME$ : FOR I = 1 TO ITER : CALL DBB4  : NEXT I : B$ = TIME$ : RETURN
  94. 940 A$ = TIME$ : FOR I = 1 TO ITER : CALL DBBCACHE:NEXT I: B$ = TIME$ : RETURN
  95. 950 A$ = TIME$ : FOR I = 1 TO ITER : CALL DBB16 : NEXT I : B$ = TIME$ : RETURN
  96. 960 A$ = TIME$ : FOR I = 1 TO ITER : CALL CB4   : NEXT I : B$ = TIME$ : RETURN
  97. 970 A$ = TIME$ : FOR I = 1 TO ITER : CALL CB16  : NEXT I : B$ = TIME$ : RETURN
  98. 980 A$ = TIME$ : FOR I = 1 TO ITER : CALL IA    : NEXT I : B$ = TIME$ : RETURN
  99. 990 A$ = TIME$ : FOR I = 1 TO ITER : CALL XFER  : NEXT I : B$ = TIME$ : RETURN
  100. 1000 REM *** Random reads
  101. 1010 IF ITER = 0 THEN A$=TIME$ : B$=A$ : RETURN
  102. 1020 OPEN "TEMP.TMP" FOR RANDOM AS #1 LEN=2048
  103. 1030 FIELD #1, 2048 AS S$
  104. 1040 A$ = TIME$
  105. 1050 FOR K = 1 TO ITER : FOR I = 1 TO MAXREADS : GET #1, I : NEXT I : NEXT K
  106. 1060 B$ = TIME$ : CLOSE #1 : RETURN
  107. 1070 REM *** Random writes
  108. 1080 IF ITER = 0 THEN A$=TIME$ : B$=A$ : RETURN
  109. 1090 OPEN "TEMP.TMP" FOR RANDOM AS #1 LEN=2048
  110. 1100 FIELD #1, 2048 AS S$ : LSET S$ = T$
  111. 1110 A$ = TIME$
  112. 1120 FOR K = 1 TO ITER : FOR I = 1 TO MAXWRITES : PUT #1, I : NEXT I : NEXT K
  113. 1130 B$ = TIME$ : CLOSE #1 : RETURN
  114.